home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / mac / LOGIC Apple II 5.25" Library - ProDOS / PRO056.dsk / SEG.PR.EDITOR.bas < prev    next >
BASIC Source File  |  2012-02-16  |  23KB  |  496 lines

  1. 10  REM <CTRL-J><CTRL-J>SEG.S3 - 03/14/87 - nrd<CTRL-J>
  2. 20  GOSUB 45000
  3. 30  ONERR  GOTO 40000
  4. 40  PRINT  CHR$(4);"PR#3": HOME : PRINT 
  5. 50  GOSUB 30000: REM - Load assembly routines before variables
  6. 60  GOSUB 20000: REM - Restore variables
  7. 70  GOSUB 16000: REM - Find online devices
  8. 80 SLOT = 1: REM - Printer slot for output
  9. 99  REM <CTRL-J><CTRL-J>Read SEG.PR<CTRL-J>
  10. 100  VTAB 1: POKE HT,32: PRINT "GETTING STARTED": PRINT EQ$
  11. 110 DFLT = 1:LBL$ = " Find SEG.PR"
  12. 120  GOSUB 7000: IF RSLT = 0  THEN 5000
  13. 130 DZ = RSLT: IF RSLT >ND  THEN  GOSUB 8000: GOTO 160
  14. 140  &  READ PTH$ AT UNIT(RSLT)
  15. 150 PTH$ = "/" +PTH$ +"/"
  16. 160  PRINT D$;"VERIFY";PTH$
  17. 170 SEG$ = PTH$ +"SEG.PR"
  18. 180  PRINT D$;"VERIFY";SEG$
  19. 190  POKE 32,10: POKE 33,50: POKE 34,8: POKE 35,ND +12: HOME : TEXT 
  20. 200  VTAB 12: POKE HT,20: PRINT "Reading ";SEG$
  21. 210  PRINT D$;"BLOAD";SEG$;",TSYS,A";BU
  22. 499  REM <CTRL-J><CTRL-J>Decode current settings<CTRL-J>
  23. 500  &  GET DR$ AT BU +1
  24. 510  &  GET DTE$ AT BU +37
  25. 520 OH =  PEEK(BU +34)
  26. 530 NP =  PEEK(BU +33)
  27. 540  FOR N = 1 TO NP
  28. 550 PT = BU +20 +(N *36)
  29. 560  &  GET P$(N) AT PT
  30. 570  &  GET I$(N) AT PT +16
  31. 580  IF  PEEK(PT +31) = 0  THEN I$(N) = "Control-I 80N"
  32. 590  IF  PEEK(PT +31) = 101  THEN I$(N) = NN$
  33. 600  IF  PEEK(PT +31) = 99  THEN I$(N) = "<has //c PIN>"
  34. 610 SL$(N) =  STR$( PEEK(PT +32))
  35. 620  IF SL$(N) = "255"  THEN SL$(N) = "Disk"
  36. 630 TY$(N) = T$( PEEK(PT +33)): REM - Type (1-12)
  37. 640 SP =  PEEK(PT +34):X =  INT(SP/128):FF$(N) = YN$(X)
  38. 650 SP = SP -(X *128):X =  INT(SP/64):PG$(N) = YN$(X)
  39. 660 SP = SP -(X *64):X =  INT(SP/32):LF$(N) = YN$(X)
  40. 670 PW$(N) =  STR$( PEEK(PT +35)/10) +" inches"
  41. 680  NEXT N
  42. 690 PZ = 1
  43. 999  REM <CTRL-J><CTRL-J>Printer menu<CTRL-J>
  44. 1000  REM - Display current settings
  45. 1010  HOME 
  46. 1020  PRINT "        Current AppleWorks Date: ";DTE$;
  47. 1030  POKE HT,59: PRINT "Escape: Save/Quit"
  48. 1040  PRINT "Standard location for data disk: ";DR$
  49. 1050  POKE HT,19: INVERSE : PRINT "  Printer 1  ";: NORMAL : PRINT  SPC( 7);: INVERSE : PRINT "  Printer 2  ";: NORMAL : PRINT  SPC( 7);: INVERSE : PRINT "  Printer 3  ";: NORMAL 
  50. 1060  POKE HT,20 *OH +12: PRINT "(";OA$;"-H)"
  51. 1070  FOR I = 0 TO NP
  52. 1080  POKE 32,I *20: VTAB 3: PRINT 
  53. 1090  PRINT P$(I): PRINT TY$(I): PRINT SL$(I): PRINT LF$(I)
  54. 1100  PRINT FF$(I): PRINT PG$(I): PRINT PW$(I): PRINT I$(I)
  55. 1110  NEXT I
  56. 1120  TEXT 
  57. 1200  REM - List printers and get choice
  58. 1210 LE = 6:TE = 12:WD = 62:HG = 10:LBL$ = "Choose a Printer": GOSUB 18000
  59. 1220  FOR I = 1 TO 8
  60. 1230 V(I) = I +14 +(I >4):V(I +8) = V(I)
  61. 1240 H(I) = 12:H(I +8) = 42
  62. 1250  NEXT 
  63. 1260  VTAB V(13): POKE HT,H(13): PRINT "Translating printer"
  64. 1270  POKE HT,H(14): PRINT "  control codes..."
  65. 1280 NI = 12
  66. 1290  FOR P = 1 TO NI
  67. 1300  ON   NOT MFLAG% GOSUB 6000: REM - Decode all control codes
  68. 1310 IT$(P) = " " +T$(P) +" "
  69. 1320  VTAB V(P): POKE HT,H(P): PRINT IT$(P)
  70. 1330  NEXT P
  71. 1340 MFLAG% = 1
  72. 1350  VTAB V(13): POKE HT,H(13): PRINT "Select printer to edit"
  73. 1360  POKE HT,H(14): PRINT "and press RETURN, or"
  74. 1370  POKE HT,H(15): PRINT "press ESCAPE to exit."
  75. 1380 DFLT = PZ:OZ = 1: GOSUB 12000: IF RSLT = 0 GOTO 5000
  76. 1390 P = RSLT:PZ = RSLT
  77. 1500  REM - Check for shared printer selection
  78. 1510  IF P >3  AND P < >10  THEN 2000
  79. 1520  IF P <3  THEN W1$ = T$(1):W2$ = T$(2):P = 1
  80. 1530  IF P >2  THEN W1$ = T$(3):W2$ = T$(10):P = 3
  81. 1540  HOME : PRINT 
  82. 1550 LE = 5:TE = 4:WD = 65:HG = 12:LBL$ = "": GOSUB 18000
  83. 1560  VTAB 8: POKE HT,28: INVERSE : PRINT " PLEASE NOTE: ": NORMAL : PRINT 
  84. 1570  PRINT : POKE HT,10: PRINT "The ";W1$;" and the ";W2$;" printers"
  85. 1580  PRINT : POKE HT,11: PRINT "share control codes.  Changes made to either of the"
  86. 1590  PRINT : POKE HT,11: PRINT "printers' definitions will affect both printers."
  87. 1600  GOSUB 10000
  88. 1999  REM <CTRL-J><CTRL-J>Options menu<CTRL-J>
  89. 2000  TEXT : HOME 
  90. 2010  PRINT "Printer type: ";T$(P);: POKE HT,59: PRINT "Escape: Printer menu"
  91. 2020  PRINT  LEFT$(UL$,79)
  92. 2030  VTAB 23: PRINT  LEFT$(UL$,79)
  93. 2040  PRINT " Choose printer option to edit, or press ";OA$;"-P to print a list";
  94. 2050 NI = 38
  95. 2060  VTAB 4: POKE HT,0
  96. 2070  FOR O = 1 TO NI
  97. 2080 V(O) = O +3:H(O) = 0: IF O >19  THEN V(O) = O -16:H(O) = 40
  98. 2090 IT$(O) = OP$(O) +B$(O,P): IF  LEN(IT$(O)) >37  THEN IT$(O) =  LEFT$(IT$(O),34) +"..."
  99. 2100  IF O = 20  THEN  VTAB 4: POKE HT,40: POKE 32,40
  100. 2110  PRINT IT$(O)
  101. 2120  NEXT O
  102. 2130  PRINT D$;"FRE"
  103. 2140  TEXT 
  104. 2150 DFLT = OZ:XX = 1: GOSUB 12000:XX = 0: REM - XX enables OA-P
  105. 2160  IF RSLT = 0  THEN 1000
  106. 2170  IF RSLT =  -1  THEN 4000
  107. 2180 O = RSLT
  108. 2199  REM <CTRL-J><CTRL-J>Edit an option<CTRL-J>
  109. 2200 OZ = O
  110. 2210  HOME 
  111. 2220  PRINT "Printer type: ";T$(P);: POKE HT,59: PRINT "Escape: Options menu"
  112. 2230  PRINT  LEFT$(UL$,79)
  113. 2240  VTAB 23: PRINT  LEFT$(UL$,79)
  114. 2250 LE = 6:TE = 5:WD = 62:HG = 11:LBL$ = OP$(O): GOSUB 18000
  115. 2260 FIRST = 1
  116. 2270  POKE 32,10: POKE 33,55: POKE 34,7: POKE 35,17: HOME 
  117. 2280  IF O = 35  THEN 3300
  118. 2290  IF O = 38  THEN 3100
  119. 2300  VTAB 8: POKE HT,0: PRINT "Current control characters are:"
  120. 2310 A$ =  MID$ (B$(O,P),1): IF A$ = ""  THEN A$ = NN$
  121. 2320  &  STOP A$ AT 55
  122. 2330  VTAB 10: POKE HT,0: PRINT A$
  123. 2340  IF O = 36  OR O = 37  THEN DI =  ASC( MID$ (DPI$(P),O -34,1)): GOTO 2390
  124. 2350  IF O >21  THEN 2400
  125. 2360 DC =  ASC( MID$ (DPI$(P),O +29,1))
  126. 2370 DI =  ASC( MID$ (DPI$(P),O +4,1))
  127. 2380  VTAB 16: POKE HT,0: PRINT "Dots per char = ";DC
  128. 2390  VTAB 17: POKE HT,0: PRINT "Dots per inch = ";DI;
  129. 2400  IF FIRST  THEN  TEXT :Q$ = "Is this OK? ": GOSUB 14000: ON OK GOTO 2700:FIRST = 0:EFLAG% = 1:A$(O,P) = "":B$(O,P) = NN$: VTAB 24: POKE HT,1: PRINT "Type the exact control characters required (^ = End):";: GOTO 2270
  130. 2410  GOSUB 10000: IF K = 94  THEN  &  TEXT A$(O,P) TO B$(O,P): GOTO 2700
  131. 2420 A$(O,P) = A$(O,P) + CHR$(K)
  132. 2430  &  TEXT A$(O,P) TO B$(O,P)
  133. 2440  GOTO 2310
  134. 2699  REM <CTRL-J><CTRL-J>Edit dots/inch<CTRL-J>
  135. 2700  TEXT 
  136. 2710  IF O = 36  OR O = 37  THEN 2860
  137. 2720  IF O >21  THEN 2000
  138. 2730 Q$ = "Are dots/inch and dots/char values OK? ": GOSUB 14000: ON OK GOTO 2000
  139. 2740  &  STORE DPI$(P) AT 768
  140. 2750  VTAB 24: POKE HT,0: CALL  -868: PRINT "Enter the new values  (see your printer manual's technical specifications)";
  141. 2760  FOR I = 1 TO 0  STEP  -1
  142. 2770 C = 0:B$ = ""
  143. 2780  VTAB 17 -I: POKE HT,26 +C: GET A$
  144. 2790  ON A$ =  CHR$(8) GOTO 2770: ON A$ =  CHR$(13) GOTO 2820: ON (A$ <"0"  OR A$ >"9") GOTO 2780
  145. 2800 EFLAG% = 1
  146. 2810  PRINT A$;"  ";:B$ = B$ +A$:C = C +1: ON C <4 GOTO 2780
  147. 2820  ON C = 0 GOTO 2840: IF  VAL(B$) >255  THEN ER = 9: GOSUB 40260: VTAB 16: POKE HT,26: PRINT DC;"  ";: GOTO 2770
  148. 2825  POKE 768 +O +4 +I *25, VAL(B$)
  149. 2830  &  GET DPI$(P) AT 768
  150. 2840  NEXT 
  151. 2850  GOTO 2000
  152. 2860 Q$ = "Is the dots/inch value OK? ": GOSUB 14000: ON OK GOTO 2000
  153. 2870  &  STORE DPI$(P) AT 768
  154. 2880  VTAB 24: POKE HT,0: CALL  -868: PRINT "Enter the new value  (see your printer manual's technical specifications)";
  155. 2890 C = 0:B$ = ""
  156. 2900  VTAB 17: POKE HT,26 +C: GET A$
  157. 2910  ON A$ =  CHR$(8) GOTO 2890: ON A$ =  CHR$(13) GOTO 2940: ON (A$ <"0"  OR A$ >"9") GOTO 2900
  158. 2920 EFLAG% = 1
  159. 2930  PRINT A$;"  ";:B$ = B$ +A$:C = C +1: ON C <4 GOTO 2900
  160. 2940  ON C = 0 GOTO 2960: IF  VAL(B$) >255  THEN ER = 9: GOSUB 40260: VTAB 17: POKE HT,26: PRINT DI;"  ";: GOTO 2930
  161. 2945  POKE 768 +O -34, VAL(B$)
  162. 2950  &  GET DPI$(P) AT 768
  163. 2960  GOTO 2000
  164. 3099  REM <CTRL-J><CTRL-J>Edit UL method<CTRL-J>
  165. 3100  IF UL(P) >3  THEN  VTAB 9: INVERSE : PRINT " ";B$(O,P);" ": NORMAL : VTAB 12: PRINT "Sorry, you can't change this option for this printer.": GOSUB 10000: GOTO 2000
  166. 3110 NI = 4
  167. 3120  FOR I = 1 TO NI
  168. 3130 V(I) = (I *2) +8:IT$(I) = " " +UM$(I -1) +" "
  169. 3140  VTAB V(I): PRINT IT$(I)
  170. 3150  NEXT I
  171. 3160 DFLT = UL(P) +1: GOSUB 12000
  172. 3170  IF RSLT = 0  THEN 3200
  173. 3180 UL(P) = RSLT -1
  174. 3190  IF UM$(UL(P)) < >B$(O,P)  THEN EFLAG% = 1:B$(O,P) = UM$(UL(P))
  175. 3200  GOTO 2000
  176. 3299  REM <CTRL-J><CTRL-J>Edit prop table #<CTRL-J>
  177. 3300  TEXT 
  178. 3310  IF B$(36,P) = ""  THEN  VTAB 12: POKE HT,10: PRINT "This printer isn't set up for proportional print.": GOSUB 10000: GOTO 2000
  179. 3320  IF PR(P) = 0  THEN PR(P) = 1
  180. 3330  VTAB 24: POKE HT,0: PRINT " Enter a number from 1 to 3, then press RETURN";
  181. 3340  VTAB 10: POKE HT,10: PRINT " Uses table # ";: INVERSE : PRINT PR(P): NORMAL 
  182. 3350  GOSUB 10000: ON K = 13 GOTO 3380: ON K = 27 GOTO 2000
  183. 3360  IF K >48  AND K <52  AND K -48 < >PR(P)  THEN PR(P) = K -48:PP(P) = 3286 +PR(P) *96:B$(O,P) = " Uses table # " + STR$(K -48):EFLAG% = 1
  184. 3370  GOTO 3340
  185. 3380 Q$ = "Do you wish to edit the table of character widths ? ": GOSUB 14000: ON   NOT OK  OR K = 27 GOTO 2000
  186. 3499  REM <CTRL-J><CTRL-J>Edit prop character widths<CTRL-J>
  187. 3500  HOME 
  188. 3510  PRINT "Proportional table # ";PR(P);: POKE HT,59: PRINT "Escape: Options menu"
  189. 3520  PRINT  LEFT$(UL$,79)
  190. 3530  VTAB 23: PRINT  LEFT$(UL$,79)
  191. 3540  FOR J = 2 TO 7
  192. 3550  VTAB J *3 -1: PRINT "Character:";
  193. 3560  FOR I = 0 TO 15
  194. 3570  IF J = 2  AND I = 0  THEN  POKE HT,11: PRINT "<sp>";: GOTO 3600
  195. 3580  IF J = 7  AND I = 15  THEN 3600
  196. 3590  POKE HT,I *4 +12: PRINT  CHR$(J *16 +I);
  197. 3600  NEXT : PRINT : PRINT "Dots wide:";
  198. 3610  FOR I = 0 TO 15
  199. 3620  IF J = 7  AND I = 15  THEN 3650
  200. 3630 X =  PEEK(BU +PP(P) +J *16 +I -32): IF X >128  THEN X = X -128
  201. 3640  POKE HT,I *4 +12: PRINT X;
  202. 3650  NEXT : PRINT 
  203. 3660  NEXT 
  204. 3670 R = 1:C = 1
  205. 3680  VTAB 24: POKE HT,1: PRINT "Use arrows to move, press RETURN to make a change.";: CALL  -868
  206. 3690  IF R = 6  AND C = 16  THEN C = 15
  207. 3700 PC$ = " " + CHR$(R *16 +15 +C) +"  "
  208. 3710  IF PC$ = "    "  THEN PC$ = "<sp>"
  209. 3720 XA = BU +PP(P) +(R +1) *16 +C -33:XC =  PEEK(XA)
  210. 3730 XD = XC -(128 *(XC >128)):XC$ =  LEFT$(" " + STR$(XD) +"  ",4)
  211. 3740  VTAB R *3 +2: POKE HT,C *4 +7: INVERSE : PRINT PC$;: NORMAL 
  212. 3750  VTAB R *3 +3: POKE HT,C *4 +7: INVERSE : PRINT XC$;: NORMAL 
  213. 3760  GOSUB 10000: ON K = 27 GOTO 3940: ON K = 13 GOTO 3840
  214. 3770  VTAB R *3 +2: POKE HT,C *4 +7: PRINT PC$;
  215. 3780  VTAB R *3 +3: POKE HT,C *4 +7: PRINT XC$;
  216. 3790  ON K = 8 GOTO 3800: ON K = 21 GOTO 3810: ON K = 10 GOTO 3820: ON K = 11 GOTO 3830: GOTO 3740
  217. 3800 C = C -1 +(16 *(C = 1)): GOTO 3690
  218. 3810 C = C +1 -(16 *(C = 16)): GOTO 3690
  219. 3820 R = R +1 -(6 *(R = 6)): GOTO 3690
  220. 3830 R = R -1 +(6 *(R = 1)): GOTO 3690
  221. 3840  VTAB 24: POKE HT,1: PRINT "Use UP/DOWN arrows to RAISE/LOWER value, then press RETURN.";
  222. 3850  GOSUB 10000: VTAB 1: POKE HT,58: PRINT "Escape: Restore entry";
  223. 3860  ON K = 10 GOTO 3870: ON K = 11 GOTO 3890: ON K = 27 GOTO 3930: ON K = 13 GOTO 3910: GOTO 3850
  224. 3870 XD = XD -1: IF XD <1  THEN XD = 1
  225. 3880  GOTO 3900
  226. 3890 XD = XD +1: IF XD >20  THEN XD = 20
  227. 3900  VTAB R *3 +3: POKE HT,C *4 +7: INVERSE : PRINT  LEFT$(" " + STR$(XD) +"  ",4): NORMAL : GOTO 3850
  228. 3910  IF XC >128  THEN XD = XD +128
  229. 3920  POKE XA,XD:EFLAG% = 1
  230. 3930  VTAB 1: POKE HT,58: PRINT " Escape: Options menu";: GOTO 3680
  231. 3940  GOTO 2000
  232. 3999  REM <CTRL-J><CTRL-J>Print out a list of this printer's codes<CTRL-J>
  233. 4000  POKE KS,0
  234. 4010  PRINT  CHR$(21): HOME 
  235. 4020  VTAB 11: PRINT "Press ";: INVERSE : PRINT "RETURN";: NORMAL : PRINT " to begin printing."
  236. 4030  VTAB 13: PRINT "Press ";: INVERSE : PRINT "ESCAPE";: NORMAL : PRINT " to cancel."
  237. 4040  GOSUB 10000: ON K = 13 GOTO 4050: ON K = 27 GOTO 4130: GOTO 4040
  238. 4050  HOME : VTAB 12: POKE HT,16: PRINT "Printing..."
  239. 4060  PRINT D$;"PR#";SLOT
  240. 4070  PRINT " PRINTER TYPE: ";T$(P): PRINT 
  241. 4080  FOR O = 1 TO 38: PRINT  SPC( 20 - LEN(OP$(O)));OP$(O);
  242. 4090  IF O <22  THEN  PRINT "("; STR$( ASC( MID$ (DPI$(P),O +29,1)));"/"; STR$( ASC( MID$ (DPI$(P),O +4,1)));")";
  243. 4100  PRINT B$(O,P): NEXT 
  244. 4110  PRINT  CHR$(12);
  245. 4120  PRINT D$;"PR#0"
  246. 4130  PRINT D$;"PR#3"
  247. 4140  GOTO 2000
  248. 4999  REM <CTRL-J><CTRL-J>Quit/save<CTRL-J>
  249. 5000  TEXT : HOME 
  250. 5010  PRINT "Save/Quit";: POKE HT,59: PRINT "Escape: Printer menu"
  251. 5020  PRINT  LEFT$(UL$,79)
  252. 5030  VTAB (23): PRINT  LEFT$(UL$,79)
  253. 5040  ON EFLAG% GOTO 5100
  254. 5050 Q$ = "You made no changes.  Do you wish to QUIT? "
  255. 5060  GOSUB 14000
  256. 5070  IF K = 27  THEN 1000
  257. 5080  IF OK  THEN 60000
  258. 5090  ON MFLAG% GOTO 1000: GOTO 10
  259. 5100 Q$ = "You made changes.  Do you wish to SAVE them? "
  260. 5110  GOSUB 14000
  261. 5120  IF   NOT OK  THEN 60000
  262. 5130  IF K = 27  THEN 1000
  263. 5199  REM <CTRL-J><CTRL-J>Reassemble the file<CTRL-J>
  264. 5200  VTAB 24: POKE HT,1: CALL  -868
  265. 5210  REM - Preamble remains intact at BU thru BU + 933
  266. 5220 FX = 958: REM - 1st printer's table
  267. 5230  VTAB 4: PRINT "Reassembling control code file:"
  268. 5240  FOR P = 1 TO 12
  269. 5250  PRINT : PRINT  SPC( 5); MID$ (T$(P) +"........",1,20);
  270. 5260  IF P = 2  OR P = 10  THEN  FOR I = 1 TO 37: PRINT ".";: NEXT : GOTO 5450
  271. 5270 A = BU +FX
  272. 5280 X =  PEEK(A -1): &  STORE DPI$(P) AT A -1: POKE A -1,X
  273. 5290 X =  PEEK(A +57): &  STORE ZERO$ AT A +57: POKE A +57,X
  274. 5300 IN = 136
  275. 5310  FOR O = 1 TO 37
  276. 5320  PRINT ".";
  277. 5330  IF   NOT  LEN(A$(O,P))  THEN 5370
  278. 5340  &  STORE A$(O,P) AT A +IN
  279. 5350  &  POKE A +56 +O *2,IN
  280. 5360 IN = IN + LEN(A$(O,P)) +1
  281. 5370  NEXT O
  282. 5380  &  POKE BU +FX +132,PP(P)
  283. 5390  POKE BU +FX +134,UL(P)
  284. 5400  POKE BU +FX +135,UK(P)
  285. 5410  &  POKE BU +932 +P *2,FX: REM - Update pointer
  286. 5420  IF P = 1  THEN  &  POKE BU +932 +4,FX: REM - ImageWriter = DMP
  287. 5430  IF P = 3  THEN  &  POKE BU +932 +20,FX: REM - Qume 11 = DWP
  288. 5440 FX = FX +IN
  289. 5450  NEXT P
  290. 5460  IF FX <3382  THEN 5800: REM - Make sure there's enough room
  291. 5470  VTAB 18: PRINT : PRINT  SPC( 5);: INVERSE : PRINT " You have ";:FX -3381;" too many characters in your control codes. ": NORMAL : GOSUB 10000: GOTO 1000
  292. 5799  REM <CTRL-J><CTRL-J>Save to disk<CTRL-J>
  293. 5800 DFLT = DZ:LBL$ = " Save SEG.PR"
  294. 5810  GOSUB 7000: IF RSLT = 0  THEN 1000
  295. 5820 DZ = RSLT: IF RSLT >ND  THEN  GOSUB 8000: GOTO 5850
  296. 5830  &  READ PTH$ AT UNIT(RSLT)
  297. 5840 PTH$ = "/" +PTH$ +"/"
  298. 5850  PRINT D$;"VERIFY";PTH$
  299. 5860 SEG$ = PTH$ +"SEG.PR"
  300. 5870  PRINT D$;"VERIFY";SEG$
  301. 5880  POKE 32,10: POKE 33,50: POKE 34,8: POKE 35,ND +12: HOME : TEXT 
  302. 5890  VTAB 12: POKE HT,20: PRINT "Saving ";SEG$
  303. 5900  PRINT D$;"BSAVE";SEG$;",A";BU;",L3670,TSYS"
  304. 5910  VTAB 17: POKE HT,22: INVERSE : PRINT " Successfully saved! ": NORMAL 
  305. 5920 EFLAG% = 0
  306. 5930  GOTO 60000
  307. 5999  REM <CTRL-J><CTRL-J>Get individual printer pointers<CTRL-J>
  308. 6000  IF P = 2  OR P = 10  THEN  RETURN : REM - Skip duplicates
  309. 6010  VTAB V(P): POKE HT,H(P)
  310. 6020  INVERSE : PRINT " ";T$(P)" ": NORMAL 
  311. 6030  &  PEEK(TABLE +P *2),C
  312. 6040 C1 = BU +C -1
  313. 6050 X =  PEEK(C1): POKE C1,58: &  GET DPI$(P) AT C1: POKE C1,X
  314. 6060 C2 = C1 +57
  315. 6070  FOR O = 1 TO 37
  316. 6080  &  PEEK(C2 +O *2),X
  317. 6090  &  GET A$(O,P) AT BU +C +X
  318. 6100  &  TEXT A$(O,P) TO B$(O,P)
  319. 6110  NEXT O
  320. 6120  &  PEEK(C1 +133),X:PP(P) = X: REM - prop table pointer (or 0)
  321. 6130  IF X  THEN PR(P) = (PP(P) -3286)/96:B$(35,P) = " Uses table # " + STR$(PR(P))
  322. 6140 UL(P) =  PEEK(C1 +135): REM - Underline type
  323. 6150 UM = UL(P): IF UL(P) >3  THEN UM = 4
  324. 6160 B$(38,P) = UM$(UM)
  325. 6170 UK(P) =  PEEK(C1 +136): REM - "Unused" byte - always 0
  326. 6180  RETURN 
  327. 6999  REM <CTRL-J><CTRL-J>Find AppleWorks Program<CTRL-J>
  328. 7000  POKE 34,4: POKE 35,22: HOME : TEXT 
  329. 7010 LE = 6:TE = 6:WD = 55:HG = ND +5: GOSUB 18000
  330. 7020  VTAB 23: POKE HT,0: PRINT  LEFT$(UL$,79)
  331. 7030  PRINT " Where is your AppleWorks Program ?";
  332. 7040  VTAB 9: POKE HT,12: PRINT "Disk drives you can use:"
  333. 7050 NI = ND +1
  334. 7060  FOR I = 1 TO NI
  335. 7070 V(I) = I +10:H(I) = 12:IT$(I) = " " +U$(I) +" "
  336. 7080  VTAB V(I): POKE HT,H(I): PRINT IT$(I)
  337. 7090  NEXT I
  338. 7100  GOSUB 12000
  339. 7110  RETURN 
  340. 7999  REM <CTRL-J><CTRL-J>Enter a pathname<CTRL-J>
  341. 8000  POKE 34,23
  342. 8010  VTAB 24: POKE HT,0: CALL  -868: PRINT " Enter a ProDOS prefix: ";PTH$;: INVERSE : PRINT " "; CHR$(8);: NORMAL 
  343. 8020  GOSUB 10000: ON K = 13 GOTO 8040: IF K <46  THEN PTH$ = "": GOTO 8010
  344. 8030  PRINT  CHR$(K);: INPUT "";PFX$:PTH$ = PTH$ + CHR$(K) +PFX$
  345. 8040  VTAB 24: POKE HT,0: CALL  -868: PRINT " Enter a ProDOS prefix: ";PTH$;
  346. 8050  IF  RIGHT$(PTH$,1) < >"/"  THEN PTH$ = PTH$ +"/"
  347. 8060  RETURN 
  348. 9999  REM <CTRL-J><CTRL-J>Get a keypress<CTRL-J>
  349. 10000  POKE KS,0: WAIT KBD,128:K =  PEEK(KBD) -128: POKE KS,0
  350. 10010 OA =  PEEK(AP) >127
  351. 10020  IF OA  AND (K = 72  OR K = 104)  THEN  &  SCRN( SLOT): GOTO 10000
  352. 10030  RETURN 
  353. 11999  REM <CTRL-J><CTRL-J>Menus<CTRL-J>
  354. 12000  REM - NI=# items; IT$(n)=items; V(n),H(n) positions; DFLT=default; RSLT=result (0=ESC)
  355. 12010 I = DFLT
  356. 12020  VTAB V(I): POKE HT,H(I): INVERSE : PRINT IT$(I): NORMAL 
  357. 12030  GOSUB 10000: VTAB V(I): POKE HT,H(I): PRINT IT$(I)
  358. 12040  ON K = 10 GOTO 12050: ON K = 11 GOTO 12070: ON K = 13 GOTO 12090: ON K = 27 GOTO 12100: ON XX  AND OA  AND (K = 80  OR K = 112) GOTO 12110: GOTO 12020
  359. 12050 I = I +1: IF I >NI  THEN I = 1
  360. 12060  GOTO 12020
  361. 12070 I = I -1: IF I <1  THEN I = NI
  362. 12080  GOTO 12020
  363. 12090 RSLT = I: RETURN 
  364. 12100 RSLT = 0: RETURN 
  365. 12110 RSLT =  -1: RETURN : REM - <Open Apple>-P requested
  366. 13999  REM <CTRL-J><CTRL-J>Yes/No<CTRL-J>
  367. 14000 OK = 0
  368. 14010  VTAB 24: POKE HT,1: CALL  -868: PRINT Q$;: IF   NOT OK  THEN  INVERSE 
  369. 14020  PRINT " No ";: NORMAL : IF OK  THEN  INVERSE 
  370. 14030  PRINT " Yes ";: NORMAL 
  371. 14040  GOSUB 10000: ON K = 8 GOTO 14050: ON K = 21 GOTO 14060: ON K = 78  OR K = 110 GOTO 14070: ON K = 27  OR K = 89  OR K = 121 GOTO 14080: ON K = 13 GOTO 14090: GOTO 14040
  372. 14050 OK = 0: GOTO 14010
  373. 14060 OK = 1: GOTO 14010
  374. 14070 OK = 0: RETURN 
  375. 14080 OK = 1: RETURN 
  376. 14090  RETURN 
  377. 15999  REM <CTRL-J><CTRL-J>Get disk device list from ProDOS<CTRL-J>
  378. 16000 ND =  PEEK(48945) +1
  379. 16010  FOR DV = 1 TO ND
  380. 16020 U =  PEEK(48945 +DV)
  381. 16030 U(DV) = U
  382. 16040 D(DV) = 1: IF U >127  THEN D(DV) = 2:U = U -128
  383. 16050 S(DV) =  INT(U/16)
  384. 16060 T(DV) = U -S(DV) *16
  385. 16070 V(DV) = T(DV) *100 -S(DV) *10 +D(DV)
  386. 16080 I(DV) = DV
  387. 16090  NEXT DV
  388. 16100  REM - Now sort list by type, slot, drive
  389. 16110 SRT = 0
  390. 16120  FOR J = 1 TO ND -1
  391. 16130  IF V(I(J)) >V(I(J +1))  THEN K = I(J):I(J) = I(J +1):I(J +1) = K:SRT = 1
  392. 16140  NEXT J
  393. 16150  ON SRT GOTO 16110
  394. 16160  FOR J = 1 TO ND
  395. 16170 U$(J) = DEV$(T(I(J))) + MID$ ( STR$(D(I(J))),L(T(I(J)))) +" (Slot " + STR$(S(I(J))) +")"
  396. 16180 UNIT(J) = U(I(J))
  397. 16190  NEXT J
  398. 16200 U$(ND +1) = "ProDOS directory"
  399. 16210  RETURN 
  400. 17999  REM <CTRL-J><CTRL-J>Draw a file folder<CTRL-J>
  401. 18000  REM - TE=top edge; LE=left edge; WD=width; HG=height; LBL$=label
  402. 18010  VTAB TE: POKE HT,LE +1: PRINT  LEFT$(UL$,25)
  403. 18020  POKE HT,LE: PRINT "|   ";LBL$;: POKE HT,LE +26: PRINT "|"; LEFT$(UL$,WD -27)
  404. 18030  FOR I = 1 TO HG: POKE HT,LE: PRINT "|";: POKE HT,LE +WD: PRINT "|": NEXT 
  405. 18040  POKE HT,LE: PRINT "|"; LEFT$(UL$,WD -1);"|";
  406. 18050  RETURN 
  407. 19999  REM <CTRL-J><CTRL-J>Variables - use SEG.VARS.CREATE to edit the VARfile<CTRL-J>
  408. 20000  PRINT  CHR$(4);"RESTORE SEG.VARS"
  409. 20010  RETURN 
  410. 29999  REM <CTRL-J><CTRL-J>Binary utilities<CTRL-J>
  411. 30000  IF  PEEK(116) = 150  THEN  PRINT  CHR$(4);"BRUN SEG.BIN"
  412. 30010  RETURN 
  413. 30020  REM - Binary utilities self-installed at $9700-$99FF
  414. 30030  REM - Buffer for SEG.PR reserved at $8900-$96FF
  415. 30040  REM - HIMEM reset to $8500
  416. 30050  REM "& GET (a$) AT (addr)" get string preceded by length byte
  417. 30060  REM "& STORE (a$) AT (addr)" put string preceded by length byte
  418. 30070  REM "& PEEK (addr),(x)" double byte peek - [ Ken Kashmarek and ]
  419. 30080  REM "& POKE (addr),(x)" double byte poke - [  Call A.P.P.L.E.  ]
  420. 30090  REM "& TEXT (a$) TO (b$)" translate ctrl chars to English
  421. 30100  REM "& STOP (a$) AT (x)" cheap word-wrap: CAUTION alters (a$)!
  422. 30110  REM "& READ (volname$) AT (unit num)" unit=(S*16)+((D-1)*128)
  423. 30120  REM "& SCRN (slot)" 80 column screen dump
  424. 30130  REM "& END" releases memory reserved by BRUN
  425. 39999  REM <CTRL-J><CTRL-J>Error handling<CTRL-J>
  426. 40000 EC =  PEEK(222): &  PEEK(218),EL
  427. 40005  ON EC GOTO 40250,40250,40010,40040,40250,40050,40250,40110: GOTO 40200
  428. 40008  REM - Error #3 (NO DEVICE CONNECTED)
  429. 40010  IF EL = 4060  THEN ER = 1: GOSUB 40260: GOTO 4120
  430. 40020  IF EL = 140  THEN ER = 2: GOSUB 40260: GOTO 100
  431. 40030  IF EL = 5830  THEN ER = 2: GOSUB 40260: GOTO 5800
  432. 40035  GOTO 40250
  433. 40038  REM - Error#4 (WRITE PROTECTED)
  434. 40040  IF EL = 5900  THEN ER = 3: GOSUB 40260: GOTO 5800
  435. 40045  GOTO 40250
  436. 40048  REM - Error#6 (PATH NOT FOUND)
  437. 40050  IF EL = 160  THEN ER = 2: GOSUB 40260: GOTO 100
  438. 40060  IF EL = 5850  THEN ER = 2: GOSUB 40260: GOTO 5800
  439. 40070  IF EL = 180  THEN ER = 5: GOSUB 40260: GOTO 100
  440. 40080  IF EL = 5870  THEN ER = 5: GOSUB 40260: GOTO 5800
  441. 40090  IF EL = 20000  THEN ER = 6: GOSUB 40260: GOTO 40
  442. 40100  IF EL = 30000  THEN ER = 6: GOSUB 40260: GOTO 40
  443. 40105  GOTO 40250
  444. 40108  REM - Error#8 (I/O ERROR)
  445. 40110  IF EL = 140  THEN ER = 7: GOSUB 40260: GOTO 100
  446. 40120  IF EL = 160  THEN ER = 7: GOSUB 40260: GOTO 100
  447. 40130  IF EL = 180  THEN ER = 7: GOSUB 40260: GOTO 100
  448. 40140  IF EL = 210  THEN ER = 7: GOSUB 40260: GOTO 100
  449. 40150  IF EL = 5830  THEN ER = 7: GOSUB 40260: GOTO 5800
  450. 40160  IF EL = 5850  THEN ER = 7: GOSUB 40260: GOTO 5800
  451. 40170  IF EL = 5870  THEN ER = 7: GOSUB 40260: GOTO 5800
  452. 40180  IF EL = 20000  THEN ER = 7: GOSUB 40260: GOTO 40
  453. 40190  IF EL = 30000  THEN ER = 7: GOSUB 40260: GOTO 40
  454. 40195  GOTO 40250
  455. 40198  REM - Misc expected errors (DISK FULL, SYNTAX ERROR, ILLEGAL QUANTITY)
  456. 40200  IF EC = 9  AND EL = 5900  THEN ER = 8: GOSUB 40260: GOTO 5800
  457. 40210  IF EC = 16  AND EL = 160  THEN ER = 4: GOSUB 40260:PTH$ = "": GOTO 100
  458. 40220  IF EC = 16  AND EL = 5850  THEN ER = 4: GOSUB 40260:PTH$ = "": GOTO 5800
  459. 40240  IF EC = 255  THEN  GOTO 5000: REM - (CONTROL-C)
  460. 40245  REM - Unexpected errors
  461. 40250 ER$(0) = "An unexpected error (#" + STR$(EC) +") has occurred (in line " + STR$(EL) +".)":ER = 0: GOSUB 40260: GOTO 60000
  462. 40255  REM - Print error message
  463. 40260 L = 38 -( LEN(ER$(ER))/2)
  464. 40270  VTAB 20: POKE HT,L: INVERSE : PRINT " ";ER$(ER);" ";: NORMAL 
  465. 40280  GOSUB 10000: POKE HT,L: CALL  -868
  466. 40290  RETURN 
  467. 44999  REM <CTRL-J>Title screen<CTRL-J>
  468. 45000  PRINT  CHR$(4);"PR#3": HOME : PRINT : VTAB 8
  469. 45010  HTAB 20: PRINT "__________________________________________"
  470. 45020  HTAB 19: PRINT "|                                          |"
  471. 45030  HTAB 19: PRINT "|              SEG.PR.Editor               |"
  472. 45040  HTAB 19: PRINT "|                                          |"
  473. 45050  HTAB 19: PRINT "|                      TM                  |"
  474. 45060  HTAB 19: PRINT "|          An AppleWorks Helper            |"
  475. 45070  HTAB 19: PRINT "|__________________________________________|"
  476. 45080  VTAB 16: HTAB 28: PRINT "A Public Domain Utility"
  477. 45090  HTAB 28: PRINT "written by Nevin Diener"
  478. 45100  HTAB 32: PRINT "Copyright 1987"
  479. 45110  VTAB 21: PRINT "   YOU MAY GIVE THIS PROGRAM AWAY.  YOU MAY NOT SELL IT OR CHARGE FOR ITS USE."
  480. 45120  VTAB 23: FOR I = 1 TO 8: PRINT "----------";: NEXT 
  481. 45130  HTAB 28: PRINT "Press a key to continue.";
  482. 45140  WAIT  -16384,128: POKE  -16368,0
  483. 45150  RETURN 
  484. 49999  REM <CTRL-J><CTRL-J>Programmer's helper<CTRL-J>
  485. 50000  INPUT "Name for text file: ";F$
  486. 50010  PRINT  CHR$(4);"open";F$
  487. 50020  PRINT  CHR$(4);"write";F$
  488. 50030  LIST 
  489. 50040  PRINT  CHR$(4);"close"
  490. 50050  END 
  491. 59999  REM <CTRL-J><CTRL-J>Exit<CTRL-J>
  492. 60000  VTAB 24: POKE HT,0: CALL  -868: POKE HT,10: PRINT " Press ";: INVERSE : PRINT " RETURN ";: NORMAL : PRINT " to exit to ProDOS, or ";: INVERSE : PRINT " SPACE ";: NORMAL : PRINT " for BASIC.";
  493. 60010  GOSUB 10000: ON K = 13 GOTO 60020: ON K = 32 GOTO 60030: GOTO 60010
  494. 60020  PRINT D$;"BYE"
  495. 60030  TEXT : HOME 
  496. 60040  &  END : REM - Call FREBUFR